#ifndef __HASH_TABLE__
#define __HASH_TABLE__

struct File;
struct HashTable;
struct PeerList;
struct Peer;

struct HashTable * newHashTable();
struct PeerList  * newPeer(struct PeerList * pl, int port, char * ip); 
struct File      * addFile(struct HashTable * ht, struct Peer * p, char * name, int length, int sizelength, char * key); 

void freeSystem(struct HashTable * ht, struct PeerList * pl);

void deletePeer(struct HashTable * ht, struct PeerList * pl, struct Peer * p); 

struct Cell * searchKey(struct HashTable *, const char* key);
struct Peer * searchPeer(struct PeerList * pl, char * ip);

void displayHT(struct HashTable*);
void displayPL(struct PeerList *);

#endif
